﻿/*!
 * \file clock.h
 * \date 2023/05/30 8:20
 *
 * \author Yunfeng.Bo
 * Contact: Yunfeng.Bo@qq.com
 *
 * \brief 基于 std::chrono 方便使用的时间工具
 *
 * \note
 */

#pragma once

#include <chrono>
#include <time.h>

#ifdef _MSC_VER
#    define LOCALTIME(time, result) localtime_s(&result, &time)
#else
#    define LOCALTIME(time, result) localtime_r(&time, &result)
#endif

namespace util {
// 时间数据类型，写起来方便
typedef std::chrono::system_clock::time_point std_time_t;

// 返回当前时间
std::chrono::system_clock::time_point now();

// 返回指定毫秒时长
std::chrono::milliseconds ms(int ms);

// 指定的时间，是否为当天
bool is_today(long l_t);
bool is_today(time_t t);

// 计算一个超时时长（单位：秒）
double timeout(double seconds);

// 计算时间差值
intmax_t time_diff(std::chrono::system_clock::time_point start,
                   std::chrono::system_clock::time_point end);

// 计算时间差值（单位：秒）
double time_diff_sec(std::chrono::system_clock::time_point start,
                     std::chrono::system_clock::time_point end);

// "%Y-%m-%d %H:%M:%S"
std::string time_to_str(const std_time_t& time);

// "%d-%02d-%02d %02d:%02d:%02d.%03d"
std::string time_to_str_ex(const std_time_t& time);

// time_t to "%Y-%m-%d %H:%M:%S"
std::string time_t_to_str(long time);
}   // namespace util